package de.haw.ai3.bs.aufgabe3.a1.vonAndre;

import java.security.SecureRandom;
import java.util.HashSet;

public class Student extends Thread {

	private String name;

	private Mensa mensa;
	private final SecureRandom randomizer = new SecureRandom();

	private HashSet<Kasse> kassenSet = new HashSet<>();

	public Student(HashSet<Kasse> kassenliste) {
		if (kassenliste != null) {
			this.kassenSet.addAll(kassenliste);
		}
	}

	public Student(Kasse[] kassenListe, String name) {
		for (Kasse kasse : kassenListe) {
			this.kassenSet.add(kasse);
		}
		this.name = name;
	}

	@Override
	public void run() {
			while (!isInterrupted()) {
				try {
				// Essen wählen
				sleep(getTime());
				// Anstellen
				mensa.anstellen(this);
				
				// Essen
				essen();
				} catch (InterruptedException e) {
					interrupt();
				}
			}
	}

	public void bezahlen(Kasse kasse) {
		System.out.println(String.format(
				"%s bezahlt an %s\t",
				this.toString(), kasse.toString()));
		try {
			sleep(getTime());
		} catch (InterruptedException e) {
		}
		System.out.println("und verlässt den Kassenbereich...");
	}

	public void essen() throws InterruptedException {
		System.out.println(String.format("\t %s genießt sein Essen...", this));
		sleep(getTime(10000));
		System.err.println(String.format("\t %s ist wieder hungrig und betritt die Mensa", this));
	}

	public Long getTime() {
		return ((long) randomizer.nextInt(5000));
	}
	
	public Long getTime(int maxTime) {
		return ((long) randomizer.nextInt(maxTime));
	}

	@Override
	public String toString() {
		return name;
	}

	public void betreteMensa(Mensa mensa) {
		this.mensa = mensa;
		start();
	}

}
